#ifndef REGISTRATIONDIALOG_H
#define REGISTRATIONDIALOG_H

#include <QDialog>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QCryptographicHash>
#include <QRandomGenerator>
#include <QRegularExpression>

namespace Ui {
class RegistrationDialog;
}

class RegistrationDialog : public QDialog
{
    Q_OBJECT

public:
    explicit RegistrationDialog(QWidget *parent = nullptr);
    ~RegistrationDialog();

    static int getValue(const QString &tableName,const int &id);

    // 初始化数据库连接
    bool initDatabase();

    // 密码强度等级
    enum PasswordStrength {
        Weak,
        Medium,
        Strong
    };

private slots:
    // 密码输入变化时检测强度
    void onPasswordTextChanged(const QString &password);

    // 注册按钮点击事件
    void onRegisterButtonClicked();

    // 账号输入验证
    void onAccountTextChanged(const QString &account);

private:
    Ui::RegistrationDialog *ui;
    QSqlDatabase db;

    // 检测密码强度
    PasswordStrength checkPasswordStrength(const QString &password);

    // 生成随机盐值
    QString generateSalt(int length = 16);

    // 密码哈希加盐
    QString hashPassword(const QString &password, const QString &salt);

    // 检查账号是否已存在
    bool isAccountExists(const QString &account);

    // 保存用户信息到数据库
    bool saveUserToDatabase(const QString &account, const QString &hashedPassword, const QString &salt);


};

#endif // REGISTRATIONDIALOG_H

